/**
 * @Title ResponseResult.java
 * @Package com.gongyibao.common.util
 * @Description TODO(用一句话描述该文件做什么)
 * @author Kunpeng
 * @date 2018年4月12日 上午9:54:21
 */
package com.gongyibao.gbase.common;

import java.io.Serializable;

/**
 * 封装的公共Controller返回体
 *
 * @author Kunpeng
 * @ClassName ResponseResult
 * @Description 封装的公共Controller返回体
 * @date 2018年4月12日 上午9:54:21
 */
public class BaseResult<T> implements Serializable {

    /**
     * 请求结果码，1成功，0失败，其他失败值，参看返回码具体的定义说明
     */
    private int statusCode;
    /**
     * 请求结果说明
     */
    private String statusMessage;
    /**
     * 业务逻辑处理 结果码
     */
    private String resultCode;
    /**
     * 业务逻辑处理 结果说明
     */
    private String resultMessage;

    /**
     * 业务逻辑数据体
     */
    private T dataPoints;
    /**
     * 异常类别，Client，Server，Unknown
     */
    private int errorType;

    public BaseResult() {
        super();
    }

    public BaseResult(T dataPoints) {
        super();
        this.dataPoints = dataPoints;
    }

    public static class Builder<T> {
        private BaseResult<T> rs = new BaseResult<T>();

        public Builder<T> statusCode(int statusCode) {
            rs.statusCode = statusCode;
            return this;
        }

        public Builder<T> statusMessage(String statusMessage) {
            rs.statusMessage = statusMessage;
            return this;
        }

        public Builder<T> resultCode(String resultCode) {
            rs.resultCode = resultCode;
            return this;
        }

        public Builder<T> resultMessage(String resultMessage) {
            rs.resultMessage = resultMessage;
            return this;
        }

        public Builder<T> dataPoints(T dataPoints) {
            rs.dataPoints = dataPoints;
            return this;
        }

        public Builder<T> errorType(int errorType) {
            rs.errorType = errorType;
            return this;
        }

        public Builder<T> setStatusCodeSuccess() {
            rs.statusCode = StatusCode.Success.ordinal();
            return this;
        }

        public Builder<T> setStatusCodeFail() {
            rs.statusCode = StatusCode.Fail.ordinal();
            return this;
        }

        public BaseResult<T> build() {
            return rs;
        }

    }

    public void setStatusCodeSuccess() {
        this.statusCode = StatusCode.Success.ordinal();
    }

    public void setStatusCodeFail() {
        this.statusCode = StatusCode.Fail.ordinal();
    }

    /**
     * 获取请求结果码，1成功，0失败，其他失败值，参看返回码具体的定义说明
     *
     * @return the statusCode
     */
    public final int getStatusCode() {
        return statusCode;
    }

    /**
     * 设置请求结果码，1成功，0失败，其他失败值，参看返回码具体的定义说明
     *
     * @param statusCode the statusCode to set
     */
    public final void setStatusCode(int statusCode) {
        this.statusCode = statusCode;
    }

    /**
     * 获取请求结果说明
     *
     * @return the statusMessage
     */
    public final String getStatusMessage() {
        return statusMessage;
    }

    /**
     * 设置请求结果说明
     *
     * @param statusMessage the statusMessage to set
     */
    public final void setStatusMessage(String statusMessage) {
        this.statusMessage = statusMessage;
    }

    /**
     * 获取业务逻辑处理 结果码
     *
     * @return the resultCode
     */
    public final String getResultCode() {
        return resultCode;
    }

    /**
     * 设置业务逻辑处理 结果码
     *
     * @param resultCode the resultCode to set
     */
    public final void setResultCode(String resultCode) {
        this.resultCode = resultCode;
    }

    /**
     * 获取业务逻辑处理 结果说明
     *
     * @return the resultMessage
     */
    public final String getResultMessage() {
        return resultMessage;
    }

    /**
     * 设置业务逻辑处理 结果说明
     *
     * @param resultMessage the resultMessage to set
     */
    public final void setResultMessage(String resultMessage) {
        this.resultMessage = resultMessage;
    }

    /**
     * 获取业务逻辑数据体
     *
     * @return the datapoints
     */
    public final T getDataPoints() {
        return dataPoints;
    }

    /**
     * 设置业务逻辑数据体
     *
     * @param dataPoints the datapoints to set
     */
    public void setDataPoints(T dataPoints) {
        this.dataPoints = dataPoints;
    }

    /**
     * 获取异常类别，Client，Server，Unknown
     *
     * @return the errorType
     */
    public final int getErrorType() {
        return errorType;
    }

    /**
     * 设置异常类别，Client，Server，Unknown
     *
     * @param errorType the errorType to set
     */
    public final void setErrorType(int errorType) {
        this.errorType = errorType;
    }


}
